package net.servir.censo.service.ws.impl;

//import java.rmi.RemoteException;
import java.util.List;

import net.servir.censo.model.Persona;
import net.servir.censo.service.ws.SRELServiceWS;
//import net.servir.capacidades.util.Retorno;
/*
import org.apache.axis2.AxisFault;
import org.reniec.rel.SRELServiceServiceStub;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2E;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2Response;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2ResponseE;
import org.reniec.rel.SRELServiceServiceStub.GetSession;
import org.reniec.rel.SRELServiceServiceStub.GetSessionE;
import org.reniec.rel.SRELServiceServiceStub.GetSessionResponse;
import org.reniec.rel.SRELServiceServiceStub.GetSessionResponseE;
*/
public class SRELServiceWSImpl implements SRELServiceWS {
 
	public String mensajeError;
	private String token="";
	private final String usuario = "SERVIRWS";
	private final String codigo = "MjA5NDA4Nzc=";
	private final String  codTxEmp = "RSC";
	private final String  dniUserEmp = "09399938";
	private org.reniec.rel.SRELServiceService service;
	private org.reniec.rel.SRELService port;
	
	public Persona getPersona(String dni) {
		
		Persona persona = new Persona();
		
		//Retorno retorno = getRegIdentConsolidada2(dni);
		obtenerToken();
        if(validarToken()){
		List<String> retorno = port.getRegIdentConsolidada2(token, usuario, codTxEmp, dniUserEmp, dni);
		//0)  COD DE ERROR
		//<return>0000</return>
		//persona.setError(((String[])retorno.getObjeto())[0]);
		for (int i=0;i<retorno.size();i++){
			System.out.println("returnArray["+i+"]="+retorno.get(i));
		}
		
		persona.setError(retorno.get(0));
		if (persona.getError().equals("0000"))
		{
			
		//1)-- AP_PRIMER
        //<return>ACUnA</return>
		persona.setPrimer_apellido(retorno.get(1));

		//2)-- AP_SEGUNDO
        //<return>AYRE</return>
		persona.setSegundo_apellido(retorno.get(2));

		//3)  -- AP_CASADA
		//<return>DE GALARZA</return>
		persona.setCasada_apellido(retorno.get(3));
 		
		//4) -- PRENOM_INSCRITO
        //<return>MARLENE MARIBEL</return>
		persona.setNombre(retorno.get(4));
		
		//5) --- CODIGO DE UBIGEO DEPARTAMENTO DOMICILIO
        //<return>14</return>
		//6)--- CODIGO DE UBIGEO PROVINCIA DOMICILIO
        //<return>01</return>
		//7)--- CODIGO DE UBIGEO DISTRITO DOMICILIO
        //<return>24</return>
		persona.setCod_ubigeo(retorno.get(5)+retorno.get(6)+retorno.get(7));
		
		//8)--- DEPARTAMENTO DOMICILIO
        //<return>LIMA</return>
		persona.setDepartamento(retorno.get(8));
		//9)--- PROVINCIA DOMICILIO
        //<return>LIMA</return>
		persona.setProvincia(retorno.get(9));
		//10)--- DISTRITO DOMICILIO
        //<return>SAN ISIDRO</return>
		persona.setDistrito(retorno.get(10));
		
		//11)--- DIRECCION DOMICILIO
        //<return>DEL PARQUE NORTE 656 - 670 354 B3 etapa 1</return>
		persona.setDireccion(retorno.get(11));
		//12)--- ESTADO CIVIL
        //<return>1</return>
		persona.setEstado_civil(retorno.get(12));
		//13)-- DE_GENERO
        //<return>2</return>
		persona.setGenero(retorno.get(13));
		
		if (persona.getGenero().equals("1"))
		{
			persona.setSexo_texto("Masculino");
			persona.setSexo("M");
		}
		if (persona.getGenero().equals("2"))
		{
			persona.setSexo_texto("Femenino");
			persona.setSexo("F");
		}
		//14)-- TO_CHAR(FE_NACIMIENTO,'YYYYMMDD')
		//							   01234567
        //<return>19620123</return>
		String f_nacimiento = retorno.get(14);
		if (f_nacimiento.length() == 8)
			persona.setF_nacimiento(f_nacimiento.substring(6, 8) +"/" + f_nacimiento.substring(4, 6) +"/"+f_nacimiento.substring(0, 4));
		
		//15)--NOMBRE DEL PADRE
        //<return>LAUREANO</return>
		
		//16)--NOMBRE DE LA MADRE
        //<return>ANGELICA</return>
		
		//17)--FECHA DE FALLECIMIENTO
        //<return>20120207</return>
		String f_fallecimiento = retorno.get(17);
		if (f_fallecimiento.length() == 8)
			persona.setF_fallecimiento(f_fallecimiento.substring(6, 8) +"/" + f_fallecimiento.substring(4, 6) +"/"+f_fallecimiento.substring(0, 4));
		
		//18)--FECHA DE CADUCIDAD
        //<return>20120913</return>
		String f_caducidad = retorno.get(18);
		if (f_caducidad.length() == 8)
			persona.setF_caducidad(f_caducidad.substring(6, 8) +"/" + f_caducidad.substring(4, 6) +"/"+f_caducidad.substring(0, 4));
		
		//19)--COD RESTRICCION
        //<return>A</return>
		persona.setCod_restriccion(retorno.get(19));
		
		if (persona.getCod_restriccion().equals(" "))
			persona.setCod_restriccion("999");
			
		//20) -- NU_DNI
        //<return>08256265</return>
		persona.setDni(retorno.get(20));
		
        //<return>21</return>
        //<return>A</return>
		
		persona.setObtenido_reniec("1");
		
		
		}else
		{
			persona.setObtenido_reniec("0");
		}
        }
		return persona;
	}
	
	public Boolean validarToken()
	 {
	     System.out.println("estado del TOKEN : "+token);
	     
	  if (token==null||"".equals(token)) { mensajeError="Error no identificado"; return false; }    
	  if ("2".equals(token)) { mensajeError="Error en la operación"; return false; }
	  if ("3".equals(token)) { mensajeError="La Consulta esta fuera del Horario Permitido";return false; }
	  if ("4".equals(token)) { mensajeError="Usuario no valido";return false;  }
	  if ("5".equals(token)) { mensajeError="La Consulta excedió la cantidad máxima permitida";return false; } 
	  if ("6".equals(token)) { mensajeError="Usuario no existe";return false; }
	  
	  //OK
	 return true;
	 }
	
	public Boolean validarEstadoConsulta(String estado){

	    System.err.println("estado validar consulta: "+estado);
	    
	    if ("NTP".equals(estado)) { mensajeError="No tienen permisos de acceso al método consulta.";return false; } 
	    if ("SINV".equals(estado)) { mensajeError="Código de Sesión ingresado inválido.";return false; } 
	    if ("UNL".equals(estado)) { mensajeError="Aplicación que consulta a Web Service no se ha autenticado.";return false;} 
	    if ("5".equals(estado)) { mensajeError="Excedió el máximo número de consultas asignadas por día.";return false;} 
	    if ("3".equals(estado)) { mensajeError="Esta consultando en un día y hora no permitido según convenio.";return false;} 
	    if ("DNE".equals(estado)) { mensajeError="El DNI consultado es inválido.";return false;} 
	    if ("DNV".equals(estado)) { mensajeError="El DNI del usuario de la empresa es inválido. No está autorizado a consultar.";return false;} 
	    if ("0002".equals(estado)) { mensajeError="El Servidor no puede atender el requerimiento.";return false;}
	    //OK
	    if ("0000".equals(estado)) { return true;}

	    mensajeError = "Error no identificado";
	    return false;
	}
	
	public void obtenerToken(){
	    
	     service = new org.reniec.rel.SRELServiceService();
	     port = service.getSRELServicePort();
	     // Obtenemos el token para realizar la consulta
	     token = port.getSession(usuario, codigo);
	}
	
}
